<?php

class NotificationController extends Controller
{
	// Uncomment the following methods and override them if needed
	/*
	public function filters()
	{
		// return the filter configuration for this controller, e.g.:
		return array(
			'inlineFilterName',
			array(
				'class'=>'path.to.FilterClass',
				'propertyName'=>'propertyValue',
			),
		);
	}

	public function actions()
	{
		// return external action classes, e.g.:
		return array(
			'action1'=>'path.to.ActionClass',
			'action2'=>array(
				'class'=>'path.to.AnotherActionClass',
				'propertyName'=>'propertyValue',
			),
		);
	}
	*/

	public function addNotification($fromUserId,$toUserId,$id,$type,$action)
	{
		$notifications = Notification::model()->viewDontRead($toUserId,$id,$type,$action);

		if(isset($notifications))
		{
			return Notification::model()->edit($fromUserId,$toUserId,$id,$type,$action);
		}
		else
		{
			if($type == 'friend')
				$data['type'] = $type;
			else
				$data['type'] = $type."_".$id;

			$data['user_id'] = $toUserId;
			$data['action'] = $action;
			$data['content'] = '{"'.$fromUserId.'":1}';

			$ob = new Notification;
			return $ob->add($data);
		}
	}

	public function viewListNotification($user_id)
	{
		$data = Notification::model()->viewListNotification($user_id);
		$notifications = array();
		foreach ($data as $notification)
		{
			$data = $notification->attributes;
			if($data['content'] !='')
			{
				$users = json_decode($data['content'],true);
				$data['fromUser'] = array();
				foreach ($users as $key => $value)
				{
					$data['fromUser'][] = User::model()->viewIdNameAvatar($key);
				}

				if($data['type'] != 'friend')
				{
					$arrTemp = explode('_', $data['type']);
					$data['type_id'] = $arrTemp[1];
					$data['type'] = $arrTemp[0];
				}

				if(count($data['fromUser'])<4)
				{
					$data['content'] = '';
					$end = count($data['fromUser'])- 1;
					for ($i=$end; $i > 0; $i--)
					{
						$data['content'] .= $data['fromUser'][$i]['name'].', ';
					}
					$data['content'] .= $data['fromUser'][0]['name'].' ';
				}
				else
				{
					$data['content'] = $data['fromUser'][count($data['fromUser'])-1]['name'].' và '.(count($data['fromUser'])-1).' người bạn khác ';
				}
				$data['thumbnail'] = $data['fromUser'][count($data['fromUser'])-1]['avatar'];

				switch ($data['type'])
				{
					case 'friend':
						switch ($data['action'])
						{
							case 'accept':
								$data['content'] .= 'đã đồng ý làm bạn với bạn.';
								break;
							case 'deny':
								$data['content'] .= 'đã không đồng ý làm bạn với bạn.';
								break;
							case 'unfriend':
								$data['content'] .= 'đã tuyệt giao với bạn.';
								break;
						}

						if(count($data['fromUser'])==1)
							$data['link'] = 'user: id '. $data['fromUser'][count($data['fromUser'])-1]['id'];
						else
							$data['link'] = '#';
						break;
					case 'list':
						switch ($data['action'])
							{
								case 'like':
									$data['content'] .= 'đã thích album nhạc của bạn.';
									break;
								case 'comment':
									$data['content'] .= 'đã bình luận album nhạc của bạn.';
									break;
								case 'tag':
									$data['content'] .= 'đã thêm bạn vào album nhạc.';
									break;
							}
						$data['link'] = Yii::app()->request->baseUrl.'/Page/List/'. $data['type_id'];
						break;
					case 'music':
						switch ($data['action'])
							{
								case 'like':
									$data['content'] .= 'đã thích clip nhạc của bạn.';
									break;
								case 'comment':
									$data['content'] .= 'đã bình luận clip nhạc của bạn.';
									break;
								case 'tag':
									$data['content'] .= 'đã thêm bạn vào clip nhạc.';
									break;
							}
						$data['link'] = Yii::app()->request->baseUrl.'/Page/Music/'. $data['type_id'];
						break;
					case 'comment':
						switch ($data['action'])
							{
								case 'like':
									$data['content'] .= 'đã thích bình luận của bạn.';
									break;
								case 'tag':
									$data['content'] .= 'đã nhắc bạn đến bạn trong bài viết.';
									break;
							}
						$data['link'] = CommentController::getLinkByIdComment($data['type_id']);
						break;
				}
				$data['posttime'] = NotificationController::getNotificationDateTime($data['posttime']);
				$notifications[] =$data;
			}
		}
		return $notifications;
	}

	public function allRead($user_id)
	{
		$status = Notification::model()->allRead($user_id);
		if($status == '')
			return 'Cập nhật thông báo mới đã đọc thất bại';
		else
			return '';
	}

	public function addNotification_Friend()
	{

		$user_id = $_POST['request']['friend_id'];
		$action = $_POST['request']['action'];

		$friend_id = Yii::app()->user->getId();

		$type = 'friend';

		//Type: friend
		//Action:  accept, deny, unfriend.
		//Content: json user_ids
		//Follow: null

		$dataTemp = Notification::model()->viewNotificationNoRead($user_id,$type,$action);
		if($dataTemp != false){
			$arrContent = json_decode($dataTemp['content'], true);
			$arrContent[$friend_id] = 1;
			$content = json_encode($arrContent);

			$status = Notification::model()->updateNotificationNoRead($user_id,$type,$action,$content);
		}else{
			$arrContent[$friend_id] = 1;
			$content = json_encode($arrContent);
			$status = Notification::model()->addNotification_Friend($user_id,$action,$content);
		}
	}

	public function actionTest()
	{
		$this->addNotification_Friend();
	}

	public function getNotificationDateTime($stringPostTime)
	{
		date_default_timezone_set('Asia/Jakarta');

		$fullTimeNow = date_create(date("Y-m-d H:i:s", time()));
		$postFullTime = date_create($stringPostTime);

		$interval = date_diff($fullTimeNow, $postFullTime);

		$temp = explode(" ",$stringPostTime);
		$postDate = explode("-",$temp['0']);
		$postTime = explode(":",$temp['1']);
		$arrPostFullTime['y'] = $postDate['0'];
		$arrPostFullTime['m'] = $postDate['1'];
		$arrPostFullTime['d'] = $postDate['2'];
		$arrPostFullTime['h'] = $postTime['0'];
		$arrPostFullTime['i'] = $postTime['1'];
		$arrPostFullTime['s'] = $postTime['2'];

		if(($interval->y)>0){
			return $arrPostFullTime['d'].'/'.$arrPostFullTime['m'].'/'.$arrPostFullTime['y'].' lúc '.$arrPostFullTime['h'].':'.$arrPostFullTime['i'];
		}else{
			if(($interval->m)>0){
				return $arrPostFullTime['d'].' tháng '.$arrPostFullTime['m'].' lúc '.$arrPostFullTime['h'].':'.$arrPostFullTime['i'];
			}else{
				if(($interval->d)>=2){
					return $arrPostFullTime['d'].' tháng '.$arrPostFullTime['m'].' lúc '.$arrPostFullTime['h'].':'.$arrPostFullTime['i'];
				}else{
					switch ($interval->d) {
						case 1:
							return 'Hôm qua lúc '.$arrPostFullTime['h'].':'.$arrPostFullTime['i'];
							break;
						case 0:
							if(($interval->h)>0){
								return "Cách đây $interval->h giờ trước";
							}else{
								if(($interval->i)>0){
									return "Cách đây $interval->i phút trước";
								}else{
									return 'Vừa xong';
								}
							}
							break;
					}
				}
			}
		}
	}
	public function getQuantityUnread($user_id)
	{
		$data = Notification::model()->getQuantityUnread($user_id);
		return intval($data['countNotification']);
	}
}